package com.hisense.hisensedatacheck.service.impl;

import com.hisense.hisensedatacheck.dao.ZrrXzcfxxMapper;
import com.hisense.hisensedatacheck.dao.ZrrXzxkxxMapper;
import com.hisense.hisensedatacheck.entity.ZrrXzcfxx;
import com.hisense.hisensedatacheck.service.ZrrXzcfxxVerifyService;
import com.hisense.hisensedatacheck.uitls.Verify;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;
@Service
public class ZrrXzcfxxVerifyServiceImpl implements ZrrXzcfxxVerifyService {
    @Autowired
    private ZrrXzcfxxMapper zrrXzcfxxMapper;


    //自然人行政处罚
    @Override
    public void zrrXzcfxxVerify() {
        //        操作状态修改
        zrrXzcfxxMapper.updateOperation();
        List<ZrrXzcfxx> zrrXzcfxxes = zrrXzcfxxMapper.selectAll();
        ArrayList<ZrrXzcfxx> updateZrrXzcfxx = new ArrayList<>();
        for (ZrrXzcfxx zrrXzcfxx : zrrXzcfxxes) {
            ArrayList<String> errors = new ArrayList<>();
            if (Verify.isNull(zrrXzcfxx.getCfXdrMc())) {
                errors.add("“行政相对人名称” 为空;");
            }
            if (Verify.isLength(zrrXzcfxx.getCfXdrMc(), 200)) {
                errors.add("“行政相对人名称”长度超过200个字符;");
            }
            if (Verify.isWenHao(zrrXzcfxx.getCfXdrMc())) {
                errors.add("“行政相对人名称”包含中英文问号;");
            }
            if (Verify.isNullOrTrueOrXingHao(zrrXzcfxx.getCfXdrMc())) {
                errors.add("“行政相对人名称”不得包含*或null或test，且长度必须大于一个汉字或大于三个字符;");
            } else if (Verify.isZiFuChangDu(zrrXzcfxx.getCfXdrMc())) {
                errors.add("“行政相对人名称”不得包含*或null或test，且长度必须大于一个汉字或大于三个字符;");
            }
            if (Verify.isNull(zrrXzcfxx.getCfXdrLb())) {
                errors.add("“（行政相对人类别）”字段为必填项;");
            }
            if (Verify.NotZiRanRen(zrrXzcfxx.getCfXdrLb())) {
                errors.add("“行政相对人类别”取值不符合字典表范围;");
            } else {
                if (!Verify.isNull(zrrXzcfxx.getCfXdrShxym())) {
                    errors.add("“行政相对人类别”为自然人时，“统一社会信用代码”必须为空;");
                }
                if (!Verify.isNull(zrrXzcfxx.getCfXdrGszc())) {
                    errors.add("“行政相对人类别”为自然人时，“工商注册号”必须为空;");
                }
                if (!Verify.isNull(zrrXzcfxx.getCfXdrZzjg())) {
                    errors.add("“行政相对人类别”为自然人时，“组织机构代码”必须为空;");
                }
                if (!Verify.isNull(zrrXzcfxx.getCfXdrSwdj())) {
                    errors.add("“行政相对人类别”为自然人时，“税务登记号”必须为空;");
                }
                if (!Verify.isNull(zrrXzcfxx.getCfXdrSydw())) {
                    errors.add("“行政相对人类别”为自然人时，“事业单位证书号”必须为空;");
                }
                if (!Verify.isNull(zrrXzcfxx.getCfXdrShzz())) {
                    errors.add("“行政相对人类别”为自然人时，“社会组织登记证号”必须为空;");
                }
                if (!Verify.isNull(zrrXzcfxx.getCfFrdb())) {
                    errors.add("“行政相对人类别”为自然人时，“法定代表人”必须为空;");
                }
                if (!Verify.isNull(zrrXzcfxx.getCfFrZjlx())) {
                    errors.add("“行政相对人类别”为自然人时，“法定代表人证件类型”必须为空;");
                }
                if (!Verify.isNull(zrrXzcfxx.getCfFrZjhm())) {
                    errors.add("“行政相对人类别”为自然人时，“法定代表人证件号码”必须为空;");
                }
                if (Verify.isNull(zrrXzcfxx.getCfXdrZjlx())) {
                    errors.add("“行政相对人类别”为自然人时,“证件类型”必填;");
                }
                if (Verify.fddbrzjlxIsShenFenZheng(zrrXzcfxx.getCfXdrZjlx(), zrrXzcfxx.getCfXdrZjhm())) {
                    errors.add("“行政相对人类别”为自然人且证件类型”为“身份证”时，身份证校验错误;");
                }
                if ((zrrXzcfxx.getCfXdrZjlx() != null && (!zrrXzcfxx.getCfXdrZjlx().equals("身份证"))) && Verify.isNull(zrrXzcfxx.getCfXdrZjhm())) {
                    errors.add("“行政相对人类别”为自然人且“证件类型”为其他值时，“证件号码”必填;");
                }
                if (Verify.isLength(zrrXzcfxx.getCfXdrZjhm(), 64)) {
                    errors.add("“行政相对人类别”为自然人时，“证件号码”长度超过64个字符;");
                }
            }
            if (Verify.isFddbrzjlx(zrrXzcfxx.getCfXdrZjlx())) {
                errors.add("“证件类型”取值不符合字典表范围;");
            }
            if (Verify.isNull(zrrXzcfxx.getCfXdrZjlx())) {
                errors.add("“证件类型”字段为必填项;");
            }
            if (Verify.isNull(zrrXzcfxx.getCfXdrZjhm())) {
                errors.add("（证件号码）”字段为必填项;");
            }
            if (Verify.isLength(zrrXzcfxx.getCfXdrZzjg(), 9)) {
                errors.add("“组织机构代码”长度超过9个字符;");
            }
            if (Verify.isNotShuZiOrZiMu(zrrXzcfxx.getCfXdrSydw())) {
                errors.add("“事业单位证书号”含有除数字或字母之外的字符;");
            }
            if (Verify.isNull(zrrXzcfxx.getCfWsh())) {
                errors.add("“行政处罚决定书文号”为空;");
            }
            if (Verify.isNullOrTrueOrXingHao(zrrXzcfxx.getCfWsh())) {
                errors.add("“行政处罚决定书文号”不得包含*或null或test;");
            }
            if (Verify.isLength(zrrXzcfxx.getCfWsh(), 128)) {
                errors.add("“行政处罚决定书文号”长度超过128个字符;");
            }
            if (Verify.isNull(zrrXzcfxx.getCfWfxw())) {
                errors.add("“违法行为类型”为空;");
            }
            if (Verify.isLength(zrrXzcfxx.getCfWfxw(), 2000)) {
                errors.add("“违法行为类型”长度超过2000个字符;");
            }
            if (Verify.isNull(zrrXzcfxx.getCfSy())) {
                errors.add("“违法事实”为空;");
            }
            if (Verify.isLength(zrrXzcfxx.getCfSy(), 5000)) {
                errors.add("“违法事实”长度超过5000个字符;");
            }
            if (Verify.isNull(zrrXzcfxx.getCfYj())) {
                errors.add("“处罚依据”为空;");
            }
            if (Verify.isLength(zrrXzcfxx.getCfYj(), 2048)) {
                errors.add("“处罚依据”长度超过2048个字符;");
            }
            if (Verify.isNull(zrrXzcfxx.getCfCflb())) {
                errors.add("“处罚类别”为空;");
            }
            if (Verify.isLength(zrrXzcfxx.getCfCflb(), 64)) {
                errors.add("“处罚类别”长度超过64个字符;");
            }
            if (Verify.chuFaLeiBieJiaoYan(zrrXzcfxx.getCfCflb())) {
                errors.add("“处罚类别”不存在字典表或者不是以“其他-”开头;");
            }
            if (Verify.isNull(zrrXzcfxx.getCfNr())) {
                errors.add("“处罚内容”为空;");
            }
            if (Verify.isLength(zrrXzcfxx.getCfNr(), 4000)) {
                errors.add("“处罚内容”长度超过4000个字符;");
            }
            if (Verify.cflbAndFaKuan(zrrXzcfxx.getCfCflb(), zrrXzcfxx.getCfNrFk())) {
                errors.add("“处罚类别”包含罚款时，罚款金额必填且处罚金额必须大于0;");
            }
            if (Verify.cflbAndWfcw(zrrXzcfxx.getCfCflb(), zrrXzcfxx.getCfNrFk())) {
                errors.add("“处罚类别”包含没收违法所得、没收非法财物时，没收违法所得、没收非法财物的金额必填且没收违法所得、没收非法财物的金额必须大于或等于0;");
            }
            if (Verify.cflbAndYyzz(zrrXzcfxx.getCfCflb(), zrrXzcfxx.getCfNrFk())) {
                errors.add("“处罚类别”包含暂扣或者吊销许可证、暂扣或者吊销执照时，暂扣或吊销证照名称及编号必填;");
            }
            if (Verify.isNull(zrrXzcfxx.getCfJdrq())) {
                errors.add("“处罚决定日期”为空;");
            }
            if (Verify.isNull(zrrXzcfxx.getCfYxq())) {
                errors.add("“处罚有效期”为空;");
            }
            if (Verify.riQiPanDuan(zrrXzcfxx.getCfJdrq(), new Date())) {
                errors.add("“处罚决定日期”不可超过当前日期;");
            }
            if (Verify.riQiPanDuan(zrrXzcfxx.getCfJdrq(), zrrXzcfxx.getCfYxq())) {
                errors.add("“处罚有效期”不可小于“处罚决定日期;");
            }
            if (Verify.riQiXiaoYan(zrrXzcfxx.getCfYxq())) {
                errors.add("“处罚有效期”时间不合法;");
            }
            if (!Verify.isNull(zrrXzcfxx.getCfGsjzq()) && Verify.riQiPanDuan(zrrXzcfxx.getCfJdrq(), zrrXzcfxx.getCfGsjzq())) {
                errors.add("“公示截止期”不为空时不可小于“处罚决定日期”;");
            }
            if (Verify.riQiXiaoYan(zrrXzcfxx.getCfGsjzq())) {
                errors.add("“公示截止期”时间不合法;");
            }
            if (Verify.isNull(zrrXzcfxx.getCfCfjg())) {
                errors.add("“处罚机关”为空;");
            }
            if (Verify.isLength(zrrXzcfxx.getCfCfjg(), 200)) {
                errors.add("“处罚机关”长度超过200个字符;");
            }
            if (Verify.isNull(zrrXzcfxx.getCfCfjgdm())) {
                errors.add("“处罚机关统一社会信用代码”为空;");
            }
            if (Verify.isTyshxydm(zrrXzcfxx.getCfCfjgdm())) {
                errors.add("“处罚机关统一社会信用代码”校验错误;");
            }
            if (Verify.isNull(zrrXzcfxx.getCfSjly())) {
                errors.add("“数据来源单位”为空;");
            }
            if (Verify.isLength(zrrXzcfxx.getCfSjly(), 200)) {
                errors.add("“数据来源单位”长度超过200个字符;");
            }
            if (Verify.isNull(zrrXzcfxx.getCfSjlydm())) {
                errors.add("“数据来源单位统一社会信用代码”为空;");
            }
            if (Verify.isTyshxydm(zrrXzcfxx.getCfSjlydm())) {
                errors.add("“数据来源单位统一社会信用代码”校验错误;");
            }
            if (Verify.isLength(zrrXzcfxx.getBz(), 512)) {
                errors.add("“备注”长度超过512个字符;");
            }
            if (Verify.yiWenShuJu(zrrXzcfxx.getCfCfjgdm()) || Verify.yiWenShuJu(zrrXzcfxx.getCfSjlydm())) {
                errors.add("疑问数据（决定机关代码/数据来源单位代码）;");
            }
            if (!(zrrXzcfxx.getCdOperation().equals("I") || zrrXzcfxx.getCdOperation().equals("U") || zrrXzcfxx.getCdOperation().equals("D"))) {
                errors.add("“cd_operation（操作状态）”字段取值范围错误;");
            }
            //保存错误信息
            if (errors.size() != 0) {
                zrrXzcfxx.setErrorData(errors.toString());
                updateZrrXzcfxx.add(zrrXzcfxx);
            }
        }
        //存储错误信息
        if (updateZrrXzcfxx.size() != 0) {
            System.out.println("修改条数:"+updateZrrXzcfxx.size());
            zrrXzcfxxMapper.updateErrorByIds(updateZrrXzcfxx);
        }
        System.out.println("自然人行政处罚执行完毕");
    }
}
